package talayaco.dao.impl;

import java.sql.SQLException;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import talayaco.dao.AlimentoDAO;
import talayaco.resources.connect.SqlMapConfig;

import com.ibatis.sqlmap.client.SqlMapClient;

public class AlimentoDAOImpl implements AlimentoDAO {

	private SqlMapClient sqlMapClient = SqlMapConfig.getSqlMap();

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.AlimentoDAO#getAlimentos()
	 */
	public List<String> getAlimentos() throws Exception {
		@SuppressWarnings("unchecked")
		List<String> alimentos = (List<String>) sqlMapClient
				.queryForList("getAlimentos");

		return alimentos;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.AlimentoDAO#getAlimentoByTipo(java.lang.String)
	 */
	@SuppressWarnings("unchecked")
	public Map<String, String> getAlimentoByTipo(String tipo) throws Exception {
		Map<String, String> alimento = (Map<String, String>) sqlMapClient
				.queryForObject("getAlimentoByTipo", tipo);
		return alimento;

	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.AlimentoDAO#updateStockAlimento(java.util.Map)
	 */
	public void updateStockAlimento(Map<String, String> datos)
			throws SQLException {
		sqlMapClient.update("updateStockAlimento", datos);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.AlimentoDAO#insertIngreso(java.util.Map)
	 */
	public void insertMovimiento(Map<String, Object> datosMovimiento)
			throws Exception {
		sqlMapClient.insert("insertMovimiento", datosMovimiento);

	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.AlimentoDAO#insertAlimento(java.util.Map)
	 */
	public void insertAlimento(Map<String, String> datos) throws SQLException {
		sqlMapClient.insert("insertAlimento", datos);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.AlimentoDAO#insertProporcion(java.util.Map)
	 */
	public void insertProporcion(Map<String, String> datos) throws Exception {
		sqlMapClient.insert("insertProporciones", datos);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.AlimentoDAO#insertDieta(java.util.Map)
	 */
	public void insertDieta(Map<String, Object> datos) throws Exception {
		sqlMapClient.insert("insertDieta", datos);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.AlimentoDAO#updateFechaHastaDieta(java.util.Map)
	 */
	public void updateFechaHastaDieta(Map<String, Object> datos)
			throws Exception {
		sqlMapClient.insert("updateFechaHastaDieta", datos);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.AlimentoDAO#getIdDieta(java.util.Map)
	 */
	public Long getIdDieta(Map<String, Object> datos) throws Exception {
		return (Long) sqlMapClient.queryForObject("getDietaId", datos);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.AlimentoDAO#existeAlimento(java.lang.String)
	 */
	public String existeAlimento(String nombreAlimento) throws Exception {
		String existe = (String) sqlMapClient.queryForObject("existeAlimento",
				nombreAlimento);
		return existe;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.AlimentoDAO#cantidadAlimentosByNombre(java.lang.String)
	 */
	public Long cantidadAlimentosByNombre(String nombreAlimento)
			throws Exception {
		return (Long) sqlMapClient.queryForObject("cantidadAlimentosByNombre",
				nombreAlimento);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.AlimentoDAO#getAlimentosCantidad()
	 */
	@SuppressWarnings("unchecked")
	public List<Map<String, String>> getAlimentosCantidad() throws Exception {
		return (List<Map<String, String>>) sqlMapClient
				.queryForList("getAlimentosCantidad");
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.AlimentoDAO#getFechasDietas(java.lang.String)
	 */
	@SuppressWarnings("unchecked")
	public List<Map<String, String>> getFechasDietas(String tipoDieta,
			Date fecha) throws Exception {
		Map<String, Object> datosConsulta = new HashMap<String, Object>();
		datosConsulta.put("tipo", tipoDieta);
		datosConsulta.put("fecha", fecha);

		return (List<Map<String, String>>) sqlMapClient.queryForList(
				"getFechasTipoDieta", datosConsulta);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.AlimentoDAO#getProporcionesDieta(java.lang.String)
	 */
	@SuppressWarnings("unchecked")
	public List<Map<String, String>> getProporcionesDieta(String id)
			throws Exception {

		return (List<Map<String, String>>) sqlMapClient.queryForList(
				"getProporcionesDieta", id);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * talayaco.dao.AlimentoDAO#getCantidadConsumidaPorCorral(java.lang.String)
	 */
	public Double getCantidadConsumidaPorCorral(Map<String, Object> tipoDieta)
			throws Exception {
		return (Double) sqlMapClient.queryForObject(
				"getCantidadConsumidaPorCorral", tipoDieta);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * talayaco.dao.AlimentoDAO#getCantidadConsumidaPorCorralUltimoDia(java.
	 * util.Map)
	 */
	public Double getCantidadConsumidaPorCorralUltimoDia(
			Map<String, Object> tipoDieta) throws Exception {
		return (Double) sqlMapClient.queryForObject(
				"getCantidadConsumidaPorCorralUltimoDia", tipoDieta);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.AlimentoDAO#getFechasByDietaId(java.lang.String)
	 */
	@SuppressWarnings("unchecked")
	public Map<String, Object> getFechasByDietaId(String id) throws Exception {
		return (Map<String, Object>) sqlMapClient.queryForObject(
				"getFechasByDietaId", id);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.AlimentoDAO#getCantidadMovimientos(java.util.Map)
	 */
	@SuppressWarnings("unchecked")
	public List<Map<String, String>> getCantidadMovimientos(
			Map<String, Object> datosConsulta) throws Exception {
		return (List<Map<String, String>>) sqlMapClient.queryForList(
				"getCantidadMovimientos", datosConsulta);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.AlimentoDAO#getCantidadConsumidas(java.util.Date,
	 * java.util.Date)
	 */
	@SuppressWarnings("unchecked")
	public List<Map<String, Object>> getCantidadConsumidas(Date fechaDesde,
			Date fechaHasta) throws Exception {
		Map<String, Object> datosConsulta = new HashMap<String, Object>();
		datosConsulta.put("fechaDesde", fechaDesde);
		datosConsulta.put("fechaHasta", fechaHasta);
		return (List<Map<String, Object>>) sqlMapClient.queryForList(
				"getCantidadesConsumidas", datosConsulta);

	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.AlimentoDAO#getDietasByFechas(java.util.Date)
	 */
	@SuppressWarnings("unchecked")
	public List<Map<String, String>> getDietasByFecha(Date fecha)
			throws Exception {
		return (List<Map<String, String>>) sqlMapClient.queryForList(
				"getDietasByFechas", fecha);
	}

}
